package 类加载器;

import java.util.Random;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P> TODO: 使用static + final修饰的字段的显示赋值操作 到底在哪个阶段进行的赋值
 *     TODO:  情况1 在链接阶段的准备环节赋值
 *     TODO:  情况2 在初始化阶段<clinit>()中赋值
 *      结论：在链接阶段的准备环节赋值的情况
 *         1.对于基本数据的字段来说，如果使用static final修饰，则显示赋值(直接赋值常量、而非调用方法)通常是在链接阶段的准备环节进行
 *         2.对于String来说，如果使用字面量的方式赋值，使用使用static final修饰 则显示赋值通常是在链接阶段的准备环节进行
 *
 *      TODO:  在初始化阶段<clinit>()赋值的情况 排除上述的在准备阶段赋值的情况之外的情况
 *
 *      TODO:最终结论:使用static+final 修饰，且显示赋值中不涉及到方法或者构造器调用的基本数据类型或String类型的显示赋值，是在链接阶段的准备环节进行的
 *
 * <P> Date: 2022/3/28:19:12
 * <P> Description:
 */

public class InitializationTest {
    //TODO:在初始化阶段<clinit>()中赋值
    public static  int a = 1;
    //TODO:在链接阶段的准备环节赋值
    public static final int INT_CONSTANT = 10;


    //TODO:在初始化阶段<clinit>()中赋值
    public static final  Integer INTEGER_CONSTANT1 =Integer.valueOf(100);
    //TODO:在初始化阶段<clinit>()中赋值
    public static Integer INTEGER_CONSTANT2 =Integer.valueOf(1000);

    //TODO:在初始化阶段<clinit>()中赋值
    public static final String s0 = "helloword";
    //TODO:在初始化阶段<clinit>()中赋值
    public static final String s1 = new String("helloword");

    //TODO:在初始化阶段<clinit>()中赋值
    public static final int NUM1 = new Random().nextInt(10);


}
